﻿using System;
using System.Text;
using Csla;

namespace Sireass.Bl
{
    [Serializable]
    public class ProyectoUpdater : CommandBase<ProyectoUpdater>
    {
        public static readonly PropertyInfo<ProyectoEdit> ProyectoProperty = RegisterProperty<ProyectoEdit>(c => c.Proyecto);
        public ProyectoEdit Proyecto
        {
            get { return ReadProperty(ProyectoProperty); }
            private set { LoadProperty(ProyectoProperty, value); }
        }

        public static readonly PropertyInfo<ProyectoEncargadoEdit> ProyectoEncargadoProperty = RegisterProperty<ProyectoEncargadoEdit>(c => c.ProyectoEncargado);
        public ProyectoEncargadoEdit ProyectoEncargado
        {
            get { return ReadProperty(ProyectoEncargadoProperty); }
            private set { LoadProperty(ProyectoEncargadoProperty, value); }
        }

        public static readonly PropertyInfo<ProyectoCarreraEdit> ProyectoCarreraProperty = RegisterProperty<ProyectoCarreraEdit>(c => c.ProyectoCarrera);
        public ProyectoCarreraEdit ProyectoCarrera
        {
            get { return ReadProperty(ProyectoCarreraProperty); }
            private set { LoadProperty(ProyectoCarreraProperty, value); }
        }

        public static readonly PropertyInfo<ActividadMacroEdit> ActividadMacroProperty = RegisterProperty<ActividadMacroEdit>(c => c.ActividadMacro);
        public ActividadMacroEdit ActividadMacro
        {
            get { return ReadProperty(ActividadMacroProperty); }
            private set { LoadProperty(ActividadMacroProperty, value); }
        }

        public static void Update(ProyectoEdit proyecto, ProyectoEncargadoEdit proyectoEncargado, ProyectoCarreraEdit proyectoCarrera, ActividadMacroEdit actividadMacro ,EventHandler<DataPortalResult<ProyectoUpdater>> callback)
        {
            var cmd = new ProyectoUpdater { Proyecto = proyecto, ProyectoEncargado = proyectoEncargado, ProyectoCarrera = proyectoCarrera, ActividadMacro = actividadMacro };
            DataPortal.BeginExecute<ProyectoUpdater>(cmd, callback);
        }

        public static ProyectoUpdater Update(ProyectoEdit proyecto, ProyectoEncargadoEdit proyectoEncargado, ProyectoCarreraEdit proyectoCarrera, ActividadMacroEdit actividadMacro)
        {
            var cmd = new ProyectoUpdater { Proyecto = proyecto, ProyectoEncargado = proyectoEncargado, ProyectoCarrera = proyectoCarrera, ActividadMacro = actividadMacro };
            return DataPortal.Execute<ProyectoUpdater>(cmd);
        }

        [Transactional(TransactionalTypes.TransactionScope)]
        protected override void DataPortal_Execute()
        {
            using (var dalManager = Sireass.Dal.DalFactory.GetManager())
            {
                Proyecto = Proyecto.Save();
                
                ProyectoEncargado.IdProyecto = Proyecto.IdProyecto;
                ProyectoEncargado = ProyectoEncargado.Save();

                ProyectoCarrera.IdProyecto = Proyecto.IdProyecto;
                ProyectoCarrera = ProyectoCarrera.Save();

                ActividadMacro.IdProyectoCarrera = ProyectoCarrera.IdProyectoCarrera;
                ActividadMacro = ActividadMacro.Save();

            }
        }

    }
}
